Flash memory is an increasingly popular form of non-volatile computer memory. Flash memory is a specific type of EEPROM (Electrically Erasable Programmable Read-Only Memory) that can be electrically erased and reprogrammed. Flash memory is perhaps most commonly used as memory cards and Universal Serial bus (USB) flash drives for general storage and data transfer between computers and other digital products. As storage, flash memory offers considerable advantages over other traditional formats, such as hard disks and other EEPROMs. For example, Flash memory typically costs far less than byte-programmable EEPROM. Flash memory is also extremely durable, being able to withstand intense pressure, extremes of temperature, and even immersion in water. This combination of lower relative production costs and improved durability has enabled flash memory to become a dominant technology wherever a significant amount of non-volatile, solid state storage is desired, such as in mobile consumer electronics. Examples of popular flash memory applications include providing storage in personal data assistants (PDAs), laptop computers, digital audio players, digital cameras, mobile phones and video game consoles.
Unfortunately, flash memory has a distinct limitation, that of having a finite number of erase-write cycles. Typical commercially available flash products may withstand up to an approximate 100,000 write-erase cycles before storage reliability becomes compromised. Wear leveling is a known technique for partially offsetting this limitation by counting the writes and dynamically remapping blocks according to a distribution algorithm in some chip firmware or file system drivers in order to spread write operations between sectors in the flash memory. Other solutions (such as block management) are also used to manage the wearing effect on the flash memory sectors.
Naturally, the performance of the firmware executing the algorithm to perform wear leveling (or other data management schemes) is of great import to the continued use of flash memory. A typical application firmware for managing data in a flash memory may store a table mapping the logical block addresses to the actual physical location of a flash memory sector. The table may be stored in local memory (such as RAM) or, alternatively, in external or system memory (such as a hard drive). Local memory provides faster read and write times, but may be limited in size, much costlier, and is volatile in nature. Conversely, external memory typically provides larger, cheaper and persistent storage at slower read and write times. Alternatively, the parameters comprising a table entry may be condensed (e.g., into a 64 bit value) and offloaded in other hardware devices, which can be re-processed to extract the original data when necessary. Hardware offloading reduces the storage requirements for data management, but requires additional processing time to convert the compressed elements to express the original data.
However, as flash memory capacity continues to increase, the accompanying table may become significantly large and difficult to store and/or load in memory. Typical flash memory firmware applications are rarely scalable in terms of system resources, such as available RAM and in terms of data set size. For example, firmware applications may not be able to account for modifications to the amount of available memory or the addition or removal of a hardware device. In many instances, the flash memory firmware application may require significant modification to function properly. Furthermore, existing firmware applications typically do not leverage the benefits provided by the available storage types, often selecting one storage type to store the data table (or compressed data) to the exclusion of the other storage types. Naturally, this may result in inefficient or sub-optimal data management in the flash memory.